/**
 * Created with IntelliJ IDEA.
 * Description :
 * User: $ {USER}
 * Date: $ {YEAR}-$ {MONTH}一$ { DAY}
 * Time: ${ TIME}
 */

/**
 * 题目：相同的树
 * 思路：先判断根结点的情况，再判断根的左子树和右子树
 */

public class Test {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        // 树相同即结构相同，节点值相同

        // 结构不一样
        if (p == null && q != null || p != null && q == null) {
            return false;
        }
        // 上面只是排除了不同时为null的情况，但同时为null的情况可能出现
        if (p == null && q == null) {
            return true;
        }
        // 节点值不一样（还得先检测结点是否为null）
        if (p.val != q.val) {
            return false;
        }
        // 上面是根结点判断完成，就开始检测左子树和右子树
        return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
    }
}

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode() {
    }

    TreeNode(int val) {
        this.val = val;
    }

    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}
